/**
 * @description 人员管理模块API
 */

import { http } from "@/utils/http";
import {
  PersonnelVO,
  PersonnelQuery,
  PersonnelRequest,
  SupplierOption
} from "@/types/attendance/personnel";
import { ResponseData } from "@/types/common/response";

/**
 * 获取人员列表
 * @param query 查询参数
 * @returns 人员列表
 */
export function getPersonnelList(
  query: PersonnelQuery
): Promise<ResponseData<{ rows: PersonnelVO[]; total: number }>> {
  return http.get<any, ResponseData<{ rows: PersonnelVO[]; total: number }>>(
    "/attendance/personnel/list",
    { params: query }
  );
}

/**
 * 获取人员详细信息
 * @param personnelId 人员ID
 * @returns 人员详细信息
 */
export function getPersonnelInfo(personnelId: string | number): Promise<ResponseData<PersonnelVO>> {
  return http.get<any, ResponseData<PersonnelVO>>(`/attendance/personnel/${personnelId}`);
}

/**
 * 新增人员
 * @param data 人员信息
 * @returns 操作结果
 */
export function addPersonnel(data: PersonnelRequest): Promise<ResponseData<void>> {
  return http.post<any, ResponseData<void>>("/attendance/personnel", { data });
}

/**
 * 修改人员
 * @param data 人员信息
 * @returns 操作结果
 */
export function updatePersonnel(data: PersonnelRequest): Promise<ResponseData<void>> {
  return http.request("put", "/attendance/personnel", { data });
}

/**
 * 删除人员
 * @param personnelIds 人员ID数组
 * @returns 操作结果
 */
export function deletePersonnel(personnelIds: string | number): Promise<ResponseData<void>> {
  return http.request("delete", "/attendance/personnel", { data: { personnelIds } });
}

/**
 * 导出人员
 * @param query 查询参数
 * @returns blob数据
 */
export function exportPersonnel(query: PersonnelQuery) {
  return http.download("/attendance/personnel/export", "人员列表.xlsx", {
    params: query
  });
}

/**
 * 下载导入模板
 */
export function downloadImportTemplate() {
  return http.get("/attendance/personnel/importTemplate", {
    responseType: "blob"
  });
}

/**
 * 导入人员
 * @param file 导入文件
 * @returns 操作结果
 */
export function importPersonnel(file: File): Promise<ResponseData<void>> {
  const formData = new FormData();
  formData.append("file", file);
  return http.post<any, ResponseData<void>>("/attendance/personnel/import", {
    data: formData,
    headers: { "Content-Type": "multipart/form-data" }
  });
}

/**
 * 获取供应商选项
 * @returns 供应商选项列表
 */
export function getSupplierOptions(): Promise<ResponseData<SupplierOption[]>> {
  return http.get<any, ResponseData<SupplierOption[]>>("/attendance/personnel/suppliers");
}

/**
 * 更新人员状态
 * @param personnelId 人员ID
 * @param status 状态值
 * @returns 操作结果
 */
export function updatePersonnelStatus(
  personnelId: string | number,
  status: string
): Promise<ResponseData<void>> {
  return http.request("put", `/attendance/personnel/status/${personnelId}`, {
    data: { status }
  });
}
